if (Function.prototype.bind && console && typeof console.log == "object") {

  ["log","info","warn","error","assert","dir","clear","profile","profileEnd"]

    .forEach(function (method) {

      console[method] = this.call(console[method], console);

    }, Function.prototype.bind);

}


// log() -- The complete, cross-browser (we don't judge!) console.log wrapper for his or her logging pleasure

if (!window.log) {

  window.log = function () {

    log.history = log.history || [];  // store logs to an array for reference

    log.history.push(arguments);

    // Modern browsers

    if (typeof console != 'undefined' && typeof console.log == 'function') {


      // Opera 11

      if (window.opera) {

        var i = 0;

        while (i < arguments.length) {

          console.log("Item " + (i+1) + ": " + arguments[i]);

          i++;

        }

      }


      // All other modern browsers

      else if ((Array.prototype.slice.call(arguments)).length == 1 && typeof Array.prototype.slice.call(arguments)[0] == 'string') {

        console.log( (Array.prototype.slice.call(arguments)).toString() );

      }

      else {

        console.log( Array.prototype.slice.call(arguments) );

      }


    }


    // IE8

    else if (!Function.prototype.bind && typeof console != 'undefined' && typeof console.log == 'object') {

      Function.prototype.call.call(console.log, console, Array.prototype.slice.call(arguments));

    }


    // IE7 and lower, and other old browsers

    else {

      // Inject Firebug lite

      if (!document.getElementById('firebug-lite')) {

        // Include the script

        var script = document.createElement('script');

        script.type = "text/javascript";

        script.id = 'firebug-lite';

        // If you run the script locally, point to /path/to/firebug-lite/build/firebug-lite.js

        script.src = 'https://getfirebug.com/firebug-lite.js';

        // If you want to expand the console window by default, uncomment this line

        //document.getElementsByTagName('HTML')[0].setAttribute('debug','true');

        document.getElementsByTagName('HEAD')[0].appendChild(script);

        setTimeout(function () { log( Array.prototype.slice.call(arguments) ); }, 2000);

      }

      else {

        // FBL was included but it hasn't finished loading yet, so try again momentarily

        setTimeout(function () { log( Array.prototype.slice.call(arguments) ); }, 500);

      }

    }

  }

}